/****************************************************************************
*					Sequencing Heuristic
*
*	Description:	Common ancestor for sequencing heuristic classes
*
****************************************************************************/

#ifndef _SequencingHeuristic_H
#define _SequencingHeuristic_H

#include <vector>
#include "ExtendedPGMStruct.h"
#include "DataSet.h"

class SequencingHeuristic {
  private:

  protected:

  public:

	  /* Data */
	  // Vector of variables that change from one timestamp to the next
	//std::vector <unsigned int> allChanges;	
	

	  /* Functions */
	  // Standard constructor - empty one
	SequencingHeuristic(void) {}
      
	  // Standard destructor - empty one
    virtual ~SequencingHeuristic() {}

	  // Initialization of internal variables from environment
	virtual int initStructure (Environment& environment) = 0;

      // Calculating feature value
	virtual int findSequence (std::vector<unsigned int>& sequence, float& seqLogLikelihood, std::vector<float>& gradients, DataSet& dataSet, ExtendedPGMStruct& extendedPGMStruct) = 0;
		
}; // end of class

#endif // _SequencingHeuristic_H
